package com.atguigu.gmall.product.redis;

import java.lang.annotation.*;

/**
 * 自定义注解:缓存+分布式锁 高频率访问接口(数据更新较少),业务方法加自定义注解优化
 * 注解上修饰注解-元注解
 * RetentionPolicy.SOURCE 表示修饰的注解只在源码中保留，编译后就被遗弃了，也就是class文件中就不存在了。
 * RetentionPolicy.CLASS 表示修饰的注解保留到编译后的class文件，运行时就被遗弃。比如在运行时通过反射去获取这个注解，会发现是不存在的。
 * RetentionPolicy.RUNTIME 表示注解一直保留到运行时
 */
@Target({ElementType.METHOD})  //注解使用地方 TYPE:类上 METHOD:方法上
@Retention(RetentionPolicy.RUNTIME)  //注解作用范围:SOURCE(源码)->CLASS(字节码)->RUNTIME(运行时)
@Inherited                        //注解是否可以被继承
@Documented                       //通过Javadoc命令生成文档后是否包含该注解
public @interface GmallCache {

    /**
     * 缓存中Key前缀
     * @return
     */
    String prefix() default "data:";


    /**
     * 缓存中Key后缀
     * @return
     */
    String suffix() default ":info";

}
